package com.slipper.util;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;

import java.util.Map;

public class HttpUtil {
    /**
     * post 请求
     * @param url 请求地址
     * @param body json数据
     * @return 返回结果
     */
    public static String post(String url, String body) {
        return post(url, null, body);
    }

    /**
     * post 请求
     * @param url 请求地址
     * @param headers 请求头
     * @param body json数据
     * @return 返回结果
     */
    public static String post(String url, Map<String, String> headers, String body) {
        return post(url, headers, body, 10, 10);
    }

    /**
     * post 请求
     * @param url 请求地址
     * @param body json数据
     * @param connectTimeout 连接超时时间，单位：秒
     * @param readTimeout 结果读取超时时间，单位：秒
     * @return 返回结果
     */
    public static String post(String url, String body, int connectTimeout, int readTimeout) {
        return post(url, null, body, connectTimeout, readTimeout);
    }
    /**
     * post 请求
     * @param url 请求地址
     * @param headers 请求头
     * @param body json数据
     * @param connectTimeout 连接超时时间，单位：秒
     * @param readTimeout 结果读取超时时间，单位：秒
     * @return 返回结果
     */
    public static String post(
            String url,
            Map<String, String> headers,
            String body,
            int connectTimeout,
            int readTimeout) {
        HttpRequest request = HttpRequest.post(url);
        if (headers != null && !headers.isEmpty()) {
            request.clearHeaders();
            request.addHeaders(headers);
        }

        try (HttpResponse response = request
                .setConnectionTimeout(connectTimeout * 1000)
                .setReadTimeout(readTimeout * 1000)
                .body(body)
                .execute()) {
            return response.body();
        }
    }

    /**
     * get 请求
     * @param url 请求地址
     * @return 返回结果
     */
    public static String get(String url) {
        return get(url, null, 10, 10);
    }

    /**
     * get 请求
     * @param url 请求地址
     * @param headers 请求头
     * @return 返回结果
     */
    public static String get(String url, Map<String, String> headers) {
        return get(url, headers, 10, 10);
    }

    /**
     * get 请求
     * @param url 请求地址
     * @param connectTimeout 连接超时时间，单位：秒
     * @param readTimeout 结果读取超时时间，单位：秒
     * @return 返回结果
     */
    public static String get(String url, int connectTimeout, int readTimeout) {
        return get(url, null, connectTimeout, readTimeout);
    }
    /**
     * get 请求
     * @param url 请求地址
     * @param headers 请求头
     * @param connectTimeout 连接超时时间，单位：秒
     * @param readTimeout 结果读取超时时间，单位：秒
     * @return 返回结果
     */
    public static String get(String url, Map<String, String> headers, int connectTimeout, int readTimeout) {
        HttpRequest request = HttpRequest.get(url);
        if (headers != null && !headers.isEmpty()) {
            request.clearHeaders();
            request.addHeaders(headers);
        }

        try (HttpResponse response = request
                .setConnectionTimeout(connectTimeout * 1000)
                .setReadTimeout(readTimeout * 1000)
                .execute()) {
            return response.body();
        }
    }
}
